import { message as alertMessage } from 'antd'
import request, { extend } from 'umi-request'

request.interceptors.request.use((url, options) => {
  options.headers = {
    ...options.headers,
    Authorization: sessionStorage.token || '',
  }
  return {
    url,
    options,
  }
})

const ERROR_CODE: { [propName: number]: string } = {
  500: '用户没有权限',
  501: '登录密码错误',
}

const STATUS_CODE: { [propName: number]: string } = {
  401: '用户未登录',
  403: '没有权限访问该接口',
  404: '当前接口未定义',
}

// 在请求回来之后组做一些事情
// 在返回拦截器里面关闭loading
request.interceptors.response.use(async (response, options) => {
  if (response.status === 200) {
    // 正常返回
    const res: any = await response.json()
    // 进行正确处理，对应STATUS_CODE里的错误代码
    if (res.code === 200) {
      return res
    } else {
      // 进行错误处理，对应ERROR_CODE里的错误代码
      // 1. 该接口不需要错误处理
      if (options.noError) {
        return res
      } else {
        const message = ERROR_CODE[res.code] || '默认错误'
        console.error(message)
        alertMessage.error(message)
        throw message
      }
    }
  } else {
    const status = response.status
    const message = STATUS_CODE[status] || '服务器错误'
    // 也可以在里面判断401等逻辑
    if (status === 401) {
      localStorage.clear()
    }
    console.error(message)
    alertMessage.error(message)
    throw message
  }
})

export const http = extend({
  // 超时时间，单位毫秒  1000毫秒 = 1秒
  timeout: 5000,
  // 请求前缀
  prefix: '/api',
  headers: {
    'Content-Type': 'application/json',
  },
})

export const httpFormData = extend({
  // 超时时间，单位毫秒  1000毫秒 = 1秒
  timeout: 5000,
  // 请求前缀
  prefix: '/api',
  headers: {
    'Content-Type': 'multipart/form-data',
  },
})
